//package com.yupi.springbootinit.mq.mqttproxy;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import org.eclipse.paho.client.mqttv3.MqttClient;
//import org.eclipse.paho.client.mqttv3.MqttMessage;
//import org.msgpack.core.MessagePack;
//import org.msgpack.value.Value;
//
//import java.nio.charset.StandardCharsets;
//import java.util.HashMap;
//import java.util.Map;
//
//public class MqttProxyDebug {
//
//    private static final String BROKER = "tcp://10.10.65.66:1883";
//    private static final String PRINTER_ID = "M300-6";
//    private static final String VERSION = "v1.1";
//
//    public static void main(String[] args) throws Exception {
//        String clientId = "mqtt-proxy-debug-" + PRINTER_ID;
//        MqttClient client = new MqttClient(BROKER, clientId);
//        client.connect();
//
//        System.out.println("[Debug] ✅ 已连接到 Broker: " + BROKER);
//
//        // 要测试哪些 topic，就加到这里
//        String[] topics = {
//                VERSION + "/Printers/" + PRINTER_ID + "/Status",
//                VERSION + "/Printers/" + PRINTER_ID + "/Task/Current",
//                VERSION + "/Printers/" + PRINTER_ID + "/Task/Remainingtime",
//                VERSION + "/Printers/" + PRINTER_ID + "/Atmosphere/Current"
//        };
//
//        for (String topic : topics) {
//            client.subscribe(topic, (receivedTopic, msg) -> {
//                try {
//                    System.out.println("\n[接收到厂家原始Topic] " + receivedTopic);
//                    String rawPayload = new String(msg.getPayload(), StandardCharsets.UTF_8);
//
//                    System.out.println("[厂家原始 JSON] " + rawPayload);
//
//                    // 用 Jackson 直接转 Map
//                    ObjectMapper mapper = new ObjectMapper();
//                    Map<String, Object> jsonMap = mapper.readValue(rawPayload, Map.class);
//
//                    Map<String, Object> flatMap = new HashMap<>();
//                    flattenJson(null, jsonMap, flatMap);
//
//                    // 打印转换后的 Map
//                    String json = mapper.writeValueAsString(flatMap);
//                    System.out.println("[转换后的 JSON] " + json);
//
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            });
//        }
//
//        System.out.println("✅ Debug Proxy 已订阅，等待消息...");
//    }
//
//    // 展开 map + renameKey
//    private static void flattenMap(String prefix, Value value, Map<String, Object> flatMap) {
//        if (value.isMapValue()) {
//            value.asMapValue().map().forEach((k, v) -> {
//                String subKey = k.toString().replace("\"", "");
//                String newKey = prefix == null ? subKey : prefix + "_" + subKey;
//                flattenMap(newKey, v, flatMap);
//            });
//        } else if (value.isArrayValue()) {
//            int i = 0;
//            for (Value v : value.asArrayValue()) {
//                String newKey = (prefix == null ? "arr" : prefix) + "_" + i;
//                flattenMap(newKey, v, flatMap);
//                i++;
//            }
//        } else {
//            Object parsedValue;
//            if (value.isIntegerValue()) parsedValue = value.asIntegerValue().toLong();
//            else if (value.isFloatValue()) parsedValue = value.asFloatValue().toDouble();
//            else if (value.isBooleanValue()) parsedValue = value.asBooleanValue().getBoolean() ? 1 : 0;
//            else parsedValue = value.toString();
//
//            String finalKey = renameKey(prefix);
//            flatMap.put(finalKey, parsedValue);
//        }
//    }
//
//    // 字段映射：厂家 → 系统标准字段
//    private static String renameKey(String key) {
//        if (key == null) return null;
//
//        // 状态
//        if (key.endsWith("Status")) return "machineStatus";
//
//        // 打印任务
//        if (key.contains("TotalLayer")) return "totalAccount";
//        if (key.contains("LayerIndex")) return "currentLayer";
//        if (key.contains("Thickness")) return "layerThickness";
//        if (key.contains("Times_Remaining")) return "remainingTime";
//        if (key.contains("Times_Begin")) return "printStartTime";
//        if (key.contains("Remaining") && key.contains("Task_Remainingtime")) return "remainingTime";
//
//        // 气氛
//        if (key.contains("oxygen") && key.endsWith("value")) return "oxygen";
//        if (key.contains("CabinPressure")) return "cabinTemp";
//        if (key.contains("FilterPressureDiff")) return "filterDp";
//        if (key.contains("FanPipeTemperature")) return "ductTemp";
//        if (key.contains("BuildCylinderTemperature")) return "buildCylinderTemp";
//        if (key.contains("EnvironmentTemperature")) return "envTemp";
//        if (key.contains("EnvironmentHumidity")) return "envHumidity";
//        if (key.contains("FanFlux")) return "fanFlux";
//
//        // 默认返回原始 key
//        return key;
//    }
//    @SuppressWarnings("unchecked")
//    private static void flattenJson(String prefix, Object value, Map<String, Object> flatMap) {
//        if (value instanceof Map) {
//            ((Map<String, Object>) value).forEach((k, v) -> {
//                String newKey = (prefix == null ? k : prefix + "_" + k);
//                flattenJson(newKey, v, flatMap);
//            });
//        } else if (value instanceof Iterable) {
//            int i = 0;
//            for (Object v : (Iterable<?>) value) {
//                String newKey = (prefix == null ? "arr" : prefix) + "_" + i;
//                flattenJson(newKey, v, flatMap);
//                i++;
//            }
//        } else {
//            // 简单类型，调用 renameKey
//            String finalKey = renameKey(prefix);
//            flatMap.put(finalKey, value);
//        }
//    }
//}